Computerized devices control almost every aspect of our life—from writing documents to controlling traffic lights. However, computerized devices are bug-prone, and thus require a testing phase in which the bugs should be discovered. The testing phase is considered one of the most difficult tasks in designing a computerized device. The cost of not discovering a bug may be enormous, as the consequences of the bug may be disastrous. For example, a bug may cause the injury of a person relying on the designated behavior of the computerized device. Additionally, a bug in hardware or firmware may be expensive to fix, as patching it requires call-back of the computerized device. Hence, many developers of computerized devices invest a substantial portion of the development cycle to discover erroneous behaviors of the computerized device.
During testing phase, developers, QA staff members, and the like test a newly developed computer component to verify that it operates properly. In some cases, test cases (also referred to simply as “tests”) may be devised to provide stimuli to the component, and enable testing whether its operation is correct (e.g., as expected).
In the context of testing new hardware design of a processing unit component, the test protocol may typically involve a three stage cycle: (1) generation, in which a specialized component referred to as “test generator” produces a set of machine instructions to be executed directly by the Design Under Test (DUT), in accordance with a desired test case specified by a user, (2) execution, wherein the generated instructions are performed by the DUT, and (3) checking, wherein the execution results are checked for correctness.